package com.spider.moudle.api;

import com.spider.moudle.entity.Proxy;
import com.spider.moudle.entity.ResponseEntity;

import java.io.IOException;
import java.util.Map;

/**
 *@author 夏茂轩
 *@description
 *@date 2017/11/7 17:00
 */
public interface Downloader {
    /**
     * @author 夏茂轩
     * @description 普通Get方法
     * @date 2017/11/8 10:05
     * @param [url] 链接
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity get(String url) throws Exception;
    /**
     * @author 夏茂轩
     * @description 普通Post方法
     * @date 2017/11/8 10:05
     * @param [url] 链接
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity post(String url) throws Exception;

    /**
     * @author 夏茂轩
     * @description 使用代理方式的Get方法
     * @date 2017/11/8 10:05
     * @param [url, useProxy] 【链接, 是否使用代理】
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity get(String url,boolean useProxy) throws Exception;
    /**
     * @author 夏茂轩
     * @description 使用代理方式的Post方法
     * @date 2017/11/8 10:05
     * @param [url, useProxy] 【链接, 是否使用代理】
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity post(String url,boolean useProxy) throws Exception;
    /**
     * @author 夏茂轩
     * @description 带有参数的普通Post方法
     * @date 2017/11/8 10:33
     * @param [url, params]  【链接, post参数】
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity post(String url, Map<String,String> params) throws Exception;

    /**
     * @author 夏茂轩
     * @description 带参数和超时的普通post方法
     * @date 2017/12/8 9:48
     * @param [url, params, timeOut]
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity post(String url, Map<String,String> params,int timeOut) throws Exception;

    /**
     * @author 夏茂轩
     * @description 使用代理并且带参数的post方法
     * @date 2017/11/8 10:34
     * @param [url, params, useProxy] 【链接, post参数,是否使用代理】
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity post(String url, Map<String,String> params,boolean useProxy) throws Exception;

    /**
     * @author 夏茂轩
     * @description 添加header
     * @date 2017/11/10 10:20
     * @param [name, val] 【名,值】
     */
    public void addHeader(String name, String val);

    /**
     * @author 夏茂轩
     * @description 使用代理的Get方法
     * @date 2017/12/7 9:35
     * @param [url, proxy]
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity get(String url,Proxy proxy) throws Exception;

    /**
     * @author 夏茂轩
     * @description 资源下载
     * @date 2017/12/27 16:11
     * @param [url]
     * @return com.spider.moudle.entity.ResponseEntity
     */
    public ResponseEntity download(String url) throws Exception;
}
